from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import TruncatedSVD

# 文本格式要求,中文需要使用分词工具预处理
document = ['我们 走 在 热闹 的 大街 上',
            '当 我们 走到 街 中心 时',
            '哪里 真是 人山人海',
            '热闹非凡']

tfidf_model = TfidfVectorizer(token_pattern=r"(?u)\b\w+\b", sublinear_tf=True, use_idf=True).fit(document)
# 得到的是一个类似于以三元组方式存储的稀疏矩阵,可以使用'.todense()'还原出原矩阵
sparse_result = tfidf_model.transform(document)

print(sparse_result)

# 这一步可以得到一个词汇列表,可以使用索引还原出对应的词
print(tfidf_model.vocabulary_)

# 该方法可以得到所有的特征的名称列表
terms = tfidf_model.get_feature_names()

print(terms)

n_pick_topics = 3            # 设定主题数为3
svd = TruncatedSVD(n_pick_topics)
X = svd.fit_transform(sparse_result)

print(X)